package org.demo;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.demo.converter.LocalDateTimeConverter;

import java.time.LocalDateTime;
import java.util.Date;

/**
 * @author yexi
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Entity {

    /**
     * {@code @ExcelIgnore}: 忽略转换excel。TIPS:这意味着如果不加这个注解则必然会参与到转换之中。
     */
    @ExcelIgnore
    private Long ignore;

    /**
     * {@code @ExcelProperty}: 为需要转换excel的字段定制属性。<p>
     * 属性解析:<p>
     * value: sheet内的标题(head)名称，可配置多个，默认值为字段名。写时:当你有多个标题时，它会自动合并。读时:当你有多个标题时，选择第一个。<p>
     * index: 列的读取或写入索引顺序，默认值为-1。如果为-1，则按Java类排序。优先级: index > order > default sort。TIPS: index不可重复。
     * order: 定义列的排序顺序，小的数字排前面。优先级：索引>顺序>默认排序。TIPS: order可重复，重复时按照优先级选用默认排序。
     * converter: 转换器，默认是AutoConverter。指定后可以强制当前字段使用该转换器。TIPS: 常用于LocalDateTime系列等原生easyExcel不支持的数据类型。
     */
    @ExcelProperty(value = {"序号", "主键"}, index = 0)
    private Integer seqNo;

    /**
     * {@code @ColumnWidth}: 设置表格的宽度。value属性默认是-1，表示使用默认列宽。
     */
    @ColumnWidth(value = 8)
    @ExcelProperty(value = "模式", index = 1)
    private String mode;

    @ColumnWidth(value = 14)
    @ExcelProperty(value = "辖区", index = 2)
    @HeadStyle(fillForegroundColor = 29)
    @ContentStyle(wrapped = true)
    private String areaCode;

    @ColumnWidth(value = 15)
    @ExcelProperty(value = "名称", index = 3)
    @HeadFontStyle(fontHeightInPoints = 20, fontName = "仿宋")
    private String name;

    @ExcelIgnore
    private String bandWidth;

    @ExcelProperty(value = "距离", index = 10)
    @ContentFontStyle(fontHeightInPoints = 10, fontName = "黑体")
    private double mileage;

    /**
     * 不显式地指明index和order
     */
    private String order1;

    /**
     * 不显式地指明index
     */
    @ExcelProperty(order = 2)
    private String order2;

    /**
     * 不显式地指明index
     */
    @ExcelProperty(order = 2)
    private String order3;

    /**
     * 不显式地指明index
     */
    @ExcelProperty(order = 1)
    private String order4;

    private Date createTime;

    @ExcelProperty(converter = LocalDateTimeConverter.class)
    private LocalDateTime updateTime;

}